{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# PCA Basics - Coding Exercises Solution\n",
    "\n",
    "In this notebook you will apply what you learned about PCA in the previous lesson to real stock data."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Install Packages"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting zipline===1.3.0 (from -r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/be/59/8c5802a7897c1095fdc409fb557f04df8f75c37174e80d2ba58c8d8a6488/zipline-1.3.0.tar.gz (2.5MB)\n",
      "\u001b[K    100% |████████████████████████████████| 2.5MB 212kB/s eta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: pip>=7.1.0 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: setuptools>18.0 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Collecting Logbook>=0.12.5 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/74/fc/3e7557ed1ef1bd4e3ee189fc670416abfc7192b550e8d3c1d858a63f41ab/Logbook-1.4.1.tar.gz (84kB)\n",
      "\u001b[K    100% |████████████████████████████████| 92kB 4.6MB/s eta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: pytz>=2016.4 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: numpy>=1.11.1 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Collecting requests-file>=1.4.1 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/23/9c/6e63c23c39e53d3df41c77a3d05a49a42c4e1383a6d2a5e3233161b89dbf/requests_file-1.4.3-py2.py3-none-any.whl\n",
      "Requirement already satisfied: scipy>=0.17.1 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: pandas<=0.22,>=0.18.1 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Collecting pandas-datareader>=0.2.1 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/cc/5c/ea5b6dcfd0f55c5fb1e37fb45335ec01cceca199b8a79339137f5ed269e0/pandas_datareader-0.7.0-py2.py3-none-any.whl (111kB)\n",
      "\u001b[K    100% |████████████████████████████████| 112kB 3.7MB/s eta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: patsy>=0.4.0 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: statsmodels>=0.6.1 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: python-dateutil>=2.4.2 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: six>=1.10.0 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: requests>=2.9.1 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: Cython>=0.25.2 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Collecting cyordereddict>=0.2.2 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/d1/1a/364cbfd927be1b743c7f0a985a7f1f7e8a51469619f9fefe4ee9240ba210/cyordereddict-1.0.0.tar.gz (138kB)\n",
      "\u001b[K    100% |████████████████████████████████| 143kB 3.4MB/s eta 0:00:01\n",
      "\u001b[?25hCollecting bottleneck>=1.0.0 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/05/ae/cedf5323f398ab4e4ff92d6c431a3e1c6a186f9b41ab3e8258dff786a290/Bottleneck-1.2.1.tar.gz (105kB)\n",
      "\u001b[K    100% |████████████████████████████████| 112kB 3.8MB/s eta 0:00:01\n",
      "\u001b[?25hCollecting contextlib2>=0.4.0 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/a2/71/8273a7eeed0aff6a854237ab5453bc9aa67deb49df4832801c21f0ff3782/contextlib2-0.5.5-py2.py3-none-any.whl\n",
      "Requirement already satisfied: decorator>=4.0.0 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: networkx<2.0,>=1.9.1 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: numexpr>=2.6.1 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Collecting bcolz<1,>=0.12.1 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/6c/8b/1ffa01f872cac36173c5eb95b58c01040d8d25f1b242c48577f4104cd3ab/bcolz-0.12.1.tar.gz (622kB)\n",
      "\u001b[K    100% |████████████████████████████████| 624kB 811kB/s eta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: click>=4.0.0 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: toolz>=0.8.2 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Collecting multipledispatch>=0.4.8 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/89/79/429ecef45fd5e4504f7474d4c3c3c4668c267be3370e4c2fd33e61506833/multipledispatch-0.6.0-py3-none-any.whl\n",
      "Requirement already satisfied: MarkupSafe>=0.23 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: Mako>=1.0.1 in /opt/conda/lib/python3.6/site-packages/Mako-1.0.7-py3.6.egg (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: sqlalchemy>=1.0.8 in /opt/conda/lib/python3.6/site-packages (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Collecting alembic>=0.7.7 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/1a/37/8df0e37d730f096f5a41514823eaec3c5e169510a5c5ddc3dcbab5446ee8/alembic-1.0.1.tar.gz (1.0MB)\n",
      "\u001b[K    100% |████████████████████████████████| 1.0MB 504kB/s eta 0:00:01\n",
      "\u001b[?25hCollecting sortedcontainers>=1.4.4 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/be/e3/a065de5fdd5849450a8a16a52a96c8db5f498f245e7eda06cc6725d04b80/sortedcontainers-2.0.5-py2.py3-none-any.whl\n",
      "Collecting intervaltree>=2.1.0 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/ca/c1/450d109b70fa58ca9d77972b02f69222412f9175ccf99fdeaf167be9583c/intervaltree-2.1.0.tar.gz\n",
      "Collecting lru-dict>=1.1.4 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/00/a5/32ed6e10246cd341ca8cc205acea5d208e4053f48a4dced2b1b31d45ba3f/lru-dict-1.1.6.tar.gz\n",
      "Collecting empyrical>=0.5.0 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/7b/55/a01b05162b764830dbbac868462f44cd847a5b6523a01ca9f955721819da/empyrical-0.5.0.tar.gz (49kB)\n",
      "\u001b[K    100% |████████████████████████████████| 51kB 4.4MB/s eta 0:00:01\n",
      "\u001b[?25hCollecting tables>=3.3.0 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/d7/1b/21f4c7f296b718575c17ef25e61c05742a283c45077b4c8d5a190b3e0b59/tables-3.4.4-cp36-cp36m-manylinux1_x86_64.whl (3.8MB)\n",
      "\u001b[K    100% |████████████████████████████████| 3.8MB 139kB/s eta 0:00:01    44% |██████████████▏                 | 1.7MB 24.6MB/s eta 0:00:01    76% |████████████████████████▋       | 2.9MB 24.1MB/s eta 0:00:01\n",
      "\u001b[?25hCollecting trading-calendars>=1.0.1 (from zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/0c/5c/2bcf3a0e0ba8485c7d756176ff2b2b56c2802d072902fb5341a6231c2a9b/trading_calendars-1.4.2.tar.gz (86kB)\n",
      "\u001b[K    100% |████████████████████████████████| 92kB 4.5MB/s eta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: lxml in /opt/conda/lib/python3.6/site-packages (from pandas-datareader>=0.2.1->zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Collecting wrapt (from pandas-datareader>=0.2.1->zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/a0/47/66897906448185fcb77fc3c2b1bc20ed0ecca81a0f2f88eda3fc5a34fc3d/wrapt-1.10.11.tar.gz\n",
      "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /opt/conda/lib/python3.6/site-packages (from requests>=2.9.1->zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: idna<2.7,>=2.5 in /opt/conda/lib/python3.6/site-packages (from requests>=2.9.1->zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: urllib3<1.23,>=1.21.1 in /opt/conda/lib/python3.6/site-packages (from requests>=2.9.1->zipline===1.3.0->-r requirements.txt (line 1))\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.6/site-packages (from requests>=2.9.1->zipline===1.3.0->-r requirements.txt (line 1))\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting python-editor>=0.3 (from alembic>=0.7.7->zipline===1.3.0->-r requirements.txt (line 1))\n",
      "  Downloading https://files.pythonhosted.org/packages/65/1e/adf6e000ea5dc909aa420352d6ba37f16434c8a3c2fa030445411a1ed545/python-editor-1.0.3.tar.gz\n",
      "Building wheels for collected packages: zipline, Logbook, cyordereddict, bottleneck, bcolz, alembic, intervaltree, lru-dict, empyrical, trading-calendars, wrapt, python-editor\n",
      "  Running setup.py bdist_wheel for zipline ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/a4/d6/67/f303ab028b004bf8e00c05b5b04fba83d8ec238b6547becdb7\n",
      "  Running setup.py bdist_wheel for Logbook ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/06/13/e9/88e9e8184d89671ffc754dc80f5eb01dabd72071bdb802c5d1\n",
      "  Running setup.py bdist_wheel for cyordereddict ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/0b/9d/8b/5bf3e22c1edd59b50f11bb19dec9dfcfe5a479fc7ace02b61f\n",
      "  Running setup.py bdist_wheel for bottleneck ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/f2/bf/ec/e0f39aa27001525ad455139ee57ec7d0776fe074dfd78c97e4\n",
      "  Running setup.py bdist_wheel for bcolz ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/c5/cc/1b/2cf1f88959af5d7f4d449b7fc6c9452d0ecbd86fd61a9ee376\n",
      "  Running setup.py bdist_wheel for alembic ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/67/59/2e/bbf7e5d1ac878f9735223846512f71782bd7889e7820ff3740\n",
      "  Running setup.py bdist_wheel for intervaltree ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/6b/cf/b0/f7ef2d0f504d26f3e9e70c2369e5725591ccfaf67d528fcbc5\n",
      "  Running setup.py bdist_wheel for lru-dict ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/b7/ef/06/fbdd555907a7d438fb33e4c8675f771ff1cf41917284c51ebf\n",
      "  Running setup.py bdist_wheel for empyrical ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/83/14/73/34fb27552601518d28bd0813d75124be76d94ab29152c69112\n",
      "  Running setup.py bdist_wheel for trading-calendars ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/29/b1/59/6c32f717ffbf9622c9098d66576bfcda058c9412ebac0214a5\n",
      "  Running setup.py bdist_wheel for wrapt ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/48/5d/04/22361a593e70d23b1f7746d932802efe1f0e523376a74f321e\n",
      "  Running setup.py bdist_wheel for python-editor ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /root/.cache/pip/wheels/36/e0/98/ba386b125a00ea9dd52e2c16aa2ec0adbbd639b84bfe2e001d\n",
      "Successfully built zipline Logbook cyordereddict bottleneck bcolz alembic intervaltree lru-dict empyrical trading-calendars wrapt python-editor\n",
      "Installing collected packages: Logbook, requests-file, wrapt, pandas-datareader, cyordereddict, bottleneck, contextlib2, bcolz, multipledispatch, python-editor, alembic, sortedcontainers, intervaltree, lru-dict, empyrical, tables, trading-calendars, zipline\n",
      "Successfully installed Logbook-1.4.1 alembic-1.0.1 bcolz-0.12.1 bottleneck-1.2.1 contextlib2-0.5.5 cyordereddict-1.0.0 empyrical-0.5.0 intervaltree-2.1.0 lru-dict-1.1.6 multipledispatch-0.6.0 pandas-datareader-0.7.0 python-editor-1.0.3 requests-file-1.4.3 sortedcontainers-2.0.5 tables-3.4.4 trading-calendars-1.4.2 wrapt-1.10.11 zipline-1.3.0\n",
      "\u001b[33mYou are using pip version 9.0.1, however version 18.1 is available.\n",
      "You should consider upgrading via the 'pip install --upgrade pip' command.\u001b[0m\n"
     ]
    }
   ],
   "source": [
    "import sys\n",
    "!{sys.executable} -m pip install -r requirements.txt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Get Returns\n",
    "\n",
    "In the previous lesson we used 2-dimensional randomly correlated data to see how we can use PCA to for dimensionality reduction. In this notebook, we will do the same but for 490-dimensional data of stock returns. We will get the stock returns using Zipline and data from Quotemedia, just as we learned in previous lessons. The function `get_returns(start_date, end_date)` in the `utils` module, gets the data from the Quotemedia data bundle and produces the stock returns for the given `start_date` and `end_date`. You are welcome to take a look at the `utils` module to see how this is done.\n",
    "\n",
    "In the code below, we use `utils.get_returns` funtion to get the returns for stock data between `2011-01-05` and `2016-01-05`. You can change the start and end dates, but if you do, you have to make sure the dates are valid trading dates. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Equity(0 [A])</th>\n",
       "      <th>Equity(1 [AAL])</th>\n",
       "      <th>Equity(2 [AAP])</th>\n",
       "      <th>Equity(3 [AAPL])</th>\n",
       "      <th>Equity(4 [ABBV])</th>\n",
       "      <th>Equity(5 [ABC])</th>\n",
       "      <th>Equity(6 [ABT])</th>\n",
       "      <th>Equity(7 [ACN])</th>\n",
       "      <th>Equity(8 [ADBE])</th>\n",
       "      <th>Equity(9 [ADI])</th>\n",
       "      <th>...</th>\n",
       "      <th>Equity(481 [XL])</th>\n",
       "      <th>Equity(482 [XLNX])</th>\n",
       "      <th>Equity(483 [XOM])</th>\n",
       "      <th>Equity(484 [XRAY])</th>\n",
       "      <th>Equity(485 [XRX])</th>\n",
       "      <th>Equity(486 [XYL])</th>\n",
       "      <th>Equity(487 [YUM])</th>\n",
       "      <th>Equity(488 [ZBH])</th>\n",
       "      <th>Equity(489 [ZION])</th>\n",
       "      <th>Equity(490 [ZTS])</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2011-01-07 00:00:00+00:00</th>\n",
       "      <td>0.008437</td>\n",
       "      <td>0.014230</td>\n",
       "      <td>0.026702</td>\n",
       "      <td>0.007146</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.001994</td>\n",
       "      <td>0.004165</td>\n",
       "      <td>0.001648</td>\n",
       "      <td>-0.007127</td>\n",
       "      <td>-0.005818</td>\n",
       "      <td>...</td>\n",
       "      <td>-0.001838</td>\n",
       "      <td>-0.005619</td>\n",
       "      <td>0.005461</td>\n",
       "      <td>-0.004044</td>\n",
       "      <td>-0.013953</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.012457</td>\n",
       "      <td>-0.000181</td>\n",
       "      <td>-0.010458</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2011-01-10 00:00:00+00:00</th>\n",
       "      <td>-0.004174</td>\n",
       "      <td>0.006195</td>\n",
       "      <td>0.007435</td>\n",
       "      <td>0.018852</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-0.005714</td>\n",
       "      <td>-0.008896</td>\n",
       "      <td>-0.008854</td>\n",
       "      <td>0.028714</td>\n",
       "      <td>0.002926</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000947</td>\n",
       "      <td>0.007814</td>\n",
       "      <td>-0.006081</td>\n",
       "      <td>0.010466</td>\n",
       "      <td>0.009733</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.001440</td>\n",
       "      <td>0.007784</td>\n",
       "      <td>-0.017945</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2011-01-11 00:00:00+00:00</th>\n",
       "      <td>-0.001886</td>\n",
       "      <td>-0.043644</td>\n",
       "      <td>-0.005927</td>\n",
       "      <td>-0.002367</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.009783</td>\n",
       "      <td>-0.002067</td>\n",
       "      <td>0.013717</td>\n",
       "      <td>0.000607</td>\n",
       "      <td>0.008753</td>\n",
       "      <td>...</td>\n",
       "      <td>0.001314</td>\n",
       "      <td>0.010179</td>\n",
       "      <td>0.007442</td>\n",
       "      <td>0.007351</td>\n",
       "      <td>0.006116</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-0.006470</td>\n",
       "      <td>0.035676</td>\n",
       "      <td>0.007467</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2011-01-12 00:00:00+00:00</th>\n",
       "      <td>0.017254</td>\n",
       "      <td>-0.008237</td>\n",
       "      <td>0.013387</td>\n",
       "      <td>0.008133</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-0.005979</td>\n",
       "      <td>-0.001011</td>\n",
       "      <td>0.022969</td>\n",
       "      <td>0.017950</td>\n",
       "      <td>0.000257</td>\n",
       "      <td>...</td>\n",
       "      <td>0.004986</td>\n",
       "      <td>0.015666</td>\n",
       "      <td>0.011763</td>\n",
       "      <td>0.027182</td>\n",
       "      <td>0.004386</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.002631</td>\n",
       "      <td>0.014741</td>\n",
       "      <td>-0.011903</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2011-01-13 00:00:00+00:00</th>\n",
       "      <td>-0.004559</td>\n",
       "      <td>0.000955</td>\n",
       "      <td>0.003031</td>\n",
       "      <td>0.003657</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.014925</td>\n",
       "      <td>-0.004451</td>\n",
       "      <td>-0.000400</td>\n",
       "      <td>-0.005719</td>\n",
       "      <td>-0.005012</td>\n",
       "      <td>...</td>\n",
       "      <td>0.030499</td>\n",
       "      <td>-0.003217</td>\n",
       "      <td>0.001694</td>\n",
       "      <td>0.000547</td>\n",
       "      <td>-0.018235</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-0.005084</td>\n",
       "      <td>-0.004665</td>\n",
       "      <td>-0.009178</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 490 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                           Equity(0 [A])  Equity(1 [AAL])  Equity(2 [AAP])  \\\n",
       "2011-01-07 00:00:00+00:00       0.008437         0.014230         0.026702   \n",
       "2011-01-10 00:00:00+00:00      -0.004174         0.006195         0.007435   \n",
       "2011-01-11 00:00:00+00:00      -0.001886        -0.043644        -0.005927   \n",
       "2011-01-12 00:00:00+00:00       0.017254        -0.008237         0.013387   \n",
       "2011-01-13 00:00:00+00:00      -0.004559         0.000955         0.003031   \n",
       "\n",
       "                           Equity(3 [AAPL])  Equity(4 [ABBV])  \\\n",
       "2011-01-07 00:00:00+00:00          0.007146               0.0   \n",
       "2011-01-10 00:00:00+00:00          0.018852               0.0   \n",
       "2011-01-11 00:00:00+00:00         -0.002367               0.0   \n",
       "2011-01-12 00:00:00+00:00          0.008133               0.0   \n",
       "2011-01-13 00:00:00+00:00          0.003657               0.0   \n",
       "\n",
       "                           Equity(5 [ABC])  Equity(6 [ABT])  Equity(7 [ACN])  \\\n",
       "2011-01-07 00:00:00+00:00         0.001994         0.004165         0.001648   \n",
       "2011-01-10 00:00:00+00:00        -0.005714        -0.008896        -0.008854   \n",
       "2011-01-11 00:00:00+00:00         0.009783        -0.002067         0.013717   \n",
       "2011-01-12 00:00:00+00:00        -0.005979        -0.001011         0.022969   \n",
       "2011-01-13 00:00:00+00:00         0.014925        -0.004451        -0.000400   \n",
       "\n",
       "                           Equity(8 [ADBE])  Equity(9 [ADI])  \\\n",
       "2011-01-07 00:00:00+00:00         -0.007127        -0.005818   \n",
       "2011-01-10 00:00:00+00:00          0.028714         0.002926   \n",
       "2011-01-11 00:00:00+00:00          0.000607         0.008753   \n",
       "2011-01-12 00:00:00+00:00          0.017950         0.000257   \n",
       "2011-01-13 00:00:00+00:00         -0.005719        -0.005012   \n",
       "\n",
       "                                 ...          Equity(481 [XL])  \\\n",
       "2011-01-07 00:00:00+00:00        ...                 -0.001838   \n",
       "2011-01-10 00:00:00+00:00        ...                  0.000947   \n",
       "2011-01-11 00:00:00+00:00        ...                  0.001314   \n",
       "2011-01-12 00:00:00+00:00        ...                  0.004986   \n",
       "2011-01-13 00:00:00+00:00        ...                  0.030499   \n",
       "\n",
       "                           Equity(482 [XLNX])  Equity(483 [XOM])  \\\n",
       "2011-01-07 00:00:00+00:00           -0.005619           0.005461   \n",
       "2011-01-10 00:00:00+00:00            0.007814          -0.006081   \n",
       "2011-01-11 00:00:00+00:00            0.010179           0.007442   \n",
       "2011-01-12 00:00:00+00:00            0.015666           0.011763   \n",
       "2011-01-13 00:00:00+00:00           -0.003217           0.001694   \n",
       "\n",
       "                           Equity(484 [XRAY])  Equity(485 [XRX])  \\\n",
       "2011-01-07 00:00:00+00:00           -0.004044          -0.013953   \n",
       "2011-01-10 00:00:00+00:00            0.010466           0.009733   \n",
       "2011-01-11 00:00:00+00:00            0.007351           0.006116   \n",
       "2011-01-12 00:00:00+00:00            0.027182           0.004386   \n",
       "2011-01-13 00:00:00+00:00            0.000547          -0.018235   \n",
       "\n",
       "                           Equity(486 [XYL])  Equity(487 [YUM])  \\\n",
       "2011-01-07 00:00:00+00:00                0.0           0.012457   \n",
       "2011-01-10 00:00:00+00:00                0.0           0.001440   \n",
       "2011-01-11 00:00:00+00:00                0.0          -0.006470   \n",
       "2011-01-12 00:00:00+00:00                0.0           0.002631   \n",
       "2011-01-13 00:00:00+00:00                0.0          -0.005084   \n",
       "\n",
       "                           Equity(488 [ZBH])  Equity(489 [ZION])  \\\n",
       "2011-01-07 00:00:00+00:00          -0.000181           -0.010458   \n",
       "2011-01-10 00:00:00+00:00           0.007784           -0.017945   \n",
       "2011-01-11 00:00:00+00:00           0.035676            0.007467   \n",
       "2011-01-12 00:00:00+00:00           0.014741           -0.011903   \n",
       "2011-01-13 00:00:00+00:00          -0.004665           -0.009178   \n",
       "\n",
       "                           Equity(490 [ZTS])  \n",
       "2011-01-07 00:00:00+00:00                0.0  \n",
       "2011-01-10 00:00:00+00:00                0.0  \n",
       "2011-01-11 00:00:00+00:00                0.0  \n",
       "2011-01-12 00:00:00+00:00                0.0  \n",
       "2011-01-13 00:00:00+00:00                0.0  \n",
       "\n",
       "[5 rows x 490 columns]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import utils\n",
    "\n",
    "# Get the returns for the fiven start and end date. Both dates must be valid trading dates\n",
    "returns = utils.get_returns(start_date='2011-01-05', end_date='2016-01-05')\n",
    "\n",
    "# Display the first rows of the returns\n",
    "returns.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Visualizing the Data\n",
    "\n",
    "As we san see above, the `returns` dataframe, contains the stock returns for 490 assets. Eventhough we can't make 490-dimensional plots, we can plot the data for two assets at a time. This plot willl then show us visually how correlated the stock returns are for a pair of stocks.\n",
    "\n",
    "In the code below, we use the `.plot.scatter(x, y)` method to make a scatter plot of the returns of column `x` and column `y`. The `x` and `y` parameters are both integers and idicate the number of the columns we want to plot. For example, if we want to see how correlated the stock of `AAL` and `AAPL` are, we can choose `x=1` and `y=3`, since we can see from the dataframe above that stock `AAL` corresponds to column number `1`, and stock `AAPL` corresponds to column number `3`. You are encouraged to plot different pairs of stocks to see how correlated they are.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fa67540d940>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Set the default figure size\n",
    "plt.rcParams['figure.figsize'] = [10.0, 6.0]\n",
    "\n",
    "# Make scatter plot\n",
    "ax = returns.plot.scatter(x = 1, y = 3, grid = True, color = 'white', alpha = 0.5, linewidth = 0)\n",
    "ax.set_facecolor('lightslategray')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Correlation of Returns\n",
    "\n",
    "Apart from visualizing the correlation between stocks as we did above, we can also create a correlation dataframe that gives the correlation between every stock. In the code below, we can accomplish this using the `.corr()` method to calculate the correlation between all the paris of stocks in our `returns` dataframe."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Equity(0 [A])</th>\n",
       "      <th>Equity(1 [AAL])</th>\n",
       "      <th>Equity(2 [AAP])</th>\n",
       "      <th>Equity(3 [AAPL])</th>\n",
       "      <th>Equity(4 [ABBV])</th>\n",
       "      <th>Equity(5 [ABC])</th>\n",
       "      <th>Equity(6 [ABT])</th>\n",
       "      <th>Equity(7 [ACN])</th>\n",
       "      <th>Equity(8 [ADBE])</th>\n",
       "      <th>Equity(9 [ADI])</th>\n",
       "      <th>...</th>\n",
       "      <th>Equity(481 [XL])</th>\n",
       "      <th>Equity(482 [XLNX])</th>\n",
       "      <th>Equity(483 [XOM])</th>\n",
       "      <th>Equity(484 [XRAY])</th>\n",
       "      <th>Equity(485 [XRX])</th>\n",
       "      <th>Equity(486 [XYL])</th>\n",
       "      <th>Equity(487 [YUM])</th>\n",
       "      <th>Equity(488 [ZBH])</th>\n",
       "      <th>Equity(489 [ZION])</th>\n",
       "      <th>Equity(490 [ZTS])</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Equity(0 [A])</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.327356</td>\n",
       "      <td>0.350274</td>\n",
       "      <td>0.357941</td>\n",
       "      <td>0.219881</td>\n",
       "      <td>0.443607</td>\n",
       "      <td>0.498730</td>\n",
       "      <td>0.528160</td>\n",
       "      <td>0.476105</td>\n",
       "      <td>0.488426</td>\n",
       "      <td>...</td>\n",
       "      <td>0.547015</td>\n",
       "      <td>0.448453</td>\n",
       "      <td>0.520123</td>\n",
       "      <td>0.568743</td>\n",
       "      <td>0.524692</td>\n",
       "      <td>0.333886</td>\n",
       "      <td>0.405655</td>\n",
       "      <td>0.485227</td>\n",
       "      <td>0.524167</td>\n",
       "      <td>0.186108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Equity(1 [AAL])</th>\n",
       "      <td>0.327356</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.243475</td>\n",
       "      <td>0.227264</td>\n",
       "      <td>0.143983</td>\n",
       "      <td>0.296306</td>\n",
       "      <td>0.244604</td>\n",
       "      <td>0.269950</td>\n",
       "      <td>0.308133</td>\n",
       "      <td>0.285740</td>\n",
       "      <td>...</td>\n",
       "      <td>0.361259</td>\n",
       "      <td>0.241502</td>\n",
       "      <td>0.177152</td>\n",
       "      <td>0.356118</td>\n",
       "      <td>0.258117</td>\n",
       "      <td>0.173434</td>\n",
       "      <td>0.254696</td>\n",
       "      <td>0.289684</td>\n",
       "      <td>0.344630</td>\n",
       "      <td>0.138426</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Equity(2 [AAP])</th>\n",
       "      <td>0.350274</td>\n",
       "      <td>0.243475</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.210157</td>\n",
       "      <td>0.211495</td>\n",
       "      <td>0.290848</td>\n",
       "      <td>0.329866</td>\n",
       "      <td>0.293221</td>\n",
       "      <td>0.301972</td>\n",
       "      <td>0.309280</td>\n",
       "      <td>...</td>\n",
       "      <td>0.312257</td>\n",
       "      <td>0.289204</td>\n",
       "      <td>0.282981</td>\n",
       "      <td>0.346646</td>\n",
       "      <td>0.275858</td>\n",
       "      <td>0.268899</td>\n",
       "      <td>0.329385</td>\n",
       "      <td>0.302148</td>\n",
       "      <td>0.329689</td>\n",
       "      <td>0.150945</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Equity(3 [AAPL])</th>\n",
       "      <td>0.357941</td>\n",
       "      <td>0.227264</td>\n",
       "      <td>0.210157</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.124744</td>\n",
       "      <td>0.261941</td>\n",
       "      <td>0.260044</td>\n",
       "      <td>0.345766</td>\n",
       "      <td>0.317921</td>\n",
       "      <td>0.384693</td>\n",
       "      <td>...</td>\n",
       "      <td>0.292361</td>\n",
       "      <td>0.284832</td>\n",
       "      <td>0.320862</td>\n",
       "      <td>0.342525</td>\n",
       "      <td>0.322910</td>\n",
       "      <td>0.251614</td>\n",
       "      <td>0.297765</td>\n",
       "      <td>0.333980</td>\n",
       "      <td>0.349393</td>\n",
       "      <td>0.155476</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Equity(4 [ABBV])</th>\n",
       "      <td>0.219881</td>\n",
       "      <td>0.143983</td>\n",
       "      <td>0.211495</td>\n",
       "      <td>0.124744</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.265333</td>\n",
       "      <td>0.355565</td>\n",
       "      <td>0.214197</td>\n",
       "      <td>0.223873</td>\n",
       "      <td>0.256881</td>\n",
       "      <td>...</td>\n",
       "      <td>0.163470</td>\n",
       "      <td>0.235468</td>\n",
       "      <td>0.229631</td>\n",
       "      <td>0.247383</td>\n",
       "      <td>0.226287</td>\n",
       "      <td>0.253060</td>\n",
       "      <td>0.203928</td>\n",
       "      <td>0.304504</td>\n",
       "      <td>0.183191</td>\n",
       "      <td>0.340621</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 490 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Equity(0 [A])  Equity(1 [AAL])  Equity(2 [AAP])  \\\n",
       "Equity(0 [A])          1.000000         0.327356         0.350274   \n",
       "Equity(1 [AAL])        0.327356         1.000000         0.243475   \n",
       "Equity(2 [AAP])        0.350274         0.243475         1.000000   \n",
       "Equity(3 [AAPL])       0.357941         0.227264         0.210157   \n",
       "Equity(4 [ABBV])       0.219881         0.143983         0.211495   \n",
       "\n",
       "                  Equity(3 [AAPL])  Equity(4 [ABBV])  Equity(5 [ABC])  \\\n",
       "Equity(0 [A])             0.357941          0.219881         0.443607   \n",
       "Equity(1 [AAL])           0.227264          0.143983         0.296306   \n",
       "Equity(2 [AAP])           0.210157          0.211495         0.290848   \n",
       "Equity(3 [AAPL])          1.000000          0.124744         0.261941   \n",
       "Equity(4 [ABBV])          0.124744          1.000000         0.265333   \n",
       "\n",
       "                  Equity(6 [ABT])  Equity(7 [ACN])  Equity(8 [ADBE])  \\\n",
       "Equity(0 [A])            0.498730         0.528160          0.476105   \n",
       "Equity(1 [AAL])          0.244604         0.269950          0.308133   \n",
       "Equity(2 [AAP])          0.329866         0.293221          0.301972   \n",
       "Equity(3 [AAPL])         0.260044         0.345766          0.317921   \n",
       "Equity(4 [ABBV])         0.355565         0.214197          0.223873   \n",
       "\n",
       "                  Equity(9 [ADI])        ...          Equity(481 [XL])  \\\n",
       "Equity(0 [A])            0.488426        ...                  0.547015   \n",
       "Equity(1 [AAL])          0.285740        ...                  0.361259   \n",
       "Equity(2 [AAP])          0.309280        ...                  0.312257   \n",
       "Equity(3 [AAPL])         0.384693        ...                  0.292361   \n",
       "Equity(4 [ABBV])         0.256881        ...                  0.163470   \n",
       "\n",
       "                  Equity(482 [XLNX])  Equity(483 [XOM])  Equity(484 [XRAY])  \\\n",
       "Equity(0 [A])               0.448453           0.520123            0.568743   \n",
       "Equity(1 [AAL])             0.241502           0.177152            0.356118   \n",
       "Equity(2 [AAP])             0.289204           0.282981            0.346646   \n",
       "Equity(3 [AAPL])            0.284832           0.320862            0.342525   \n",
       "Equity(4 [ABBV])            0.235468           0.229631            0.247383   \n",
       "\n",
       "                  Equity(485 [XRX])  Equity(486 [XYL])  Equity(487 [YUM])  \\\n",
       "Equity(0 [A])              0.524692           0.333886           0.405655   \n",
       "Equity(1 [AAL])            0.258117           0.173434           0.254696   \n",
       "Equity(2 [AAP])            0.275858           0.268899           0.329385   \n",
       "Equity(3 [AAPL])           0.322910           0.251614           0.297765   \n",
       "Equity(4 [ABBV])           0.226287           0.253060           0.203928   \n",
       "\n",
       "                  Equity(488 [ZBH])  Equity(489 [ZION])  Equity(490 [ZTS])  \n",
       "Equity(0 [A])              0.485227            0.524167           0.186108  \n",
       "Equity(1 [AAL])            0.289684            0.344630           0.138426  \n",
       "Equity(2 [AAP])            0.302148            0.329689           0.150945  \n",
       "Equity(3 [AAPL])           0.333980            0.349393           0.155476  \n",
       "Equity(4 [ABBV])           0.304504            0.183191           0.340621  \n",
       "\n",
       "[5 rows x 490 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Display the correlation between all stock pairs in the returns dataframe\n",
    "returns.corr(method = 'pearson').head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see, this is a better way to see how correlated the stock returns are than through visulaization. By looking at the table we can easily spot which pairs of stock have the highest correlation. \n",
    "\n",
    "# TODO:\n",
    "\n",
    "In the code below, make a scatter of equity `A` and equity `XOM`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnkAAAF3CAYAAADZ611MAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3Xt4JNd53/nvqer7BegBBjPgDESAc7EoWiRFkZas+PLE3rWjxBclT6yV5JuSdR7G2djJk01217k5jmLnsZ21HWftdVa+S15H8crJmonlKFa8jmPHckSLsihS0sMhNSNiyJkBZwYDNPpS3dVn/zhVhe5Gd6Mxg2vj93kectDd1VWnq7tRL84573uMtRYRERERmSzeQTdARERERHafgjwRERGRCaQgT0RERGQCKcgTERERmUAK8kREREQmkII8ERERkQmkIE9ERERkAinIExEREZlACvJEREREJpCCPBEREZEJlDroBhwGhWLJTp+YHXv7XCZFI2jvYYuONp2f4XRuhtO5GU3nZzidm9F0foY7qufm2tUvvmatndtuOwV5wPSJWd77vX9/7O0fXpzh2Su39rBFR5vOz3A6N8Pp3Iym8zOczs1oOj/DHdVz8yPf91evjLOdhmtFREREJpCCPBEREZEJpCBPREREZAIpyBMRERGZQAryRERERCaQgjwRERGRCaQgT0RERGQCKcgTERERmUAK8kREREQmkII8ERERkQmkIE9ERERkAinIExEREZlACvJEREREJpCCPBEREZEJpCBPREREZAIpyBMRERGZQAryRERERCaQgjwRERGRCaQgT0RERGQCKcgTERERmUAK8kREREQmUOqgGyAiIhIzwOLCPNPlInfWN7i8fO2gmyRyZCnIExGRQ2NxYZ4Li2cBmJupACjQE7lLGq4VEZFDY7pcHHlbRManIE9ERA6NO+sbI2+LyPg0XCsiIodGPDSrOXki905BnoiIHCoK7ER2h4ZrRURERCaQgjwRERGRCaQgT0RERGQCKcgTERERmUAHGuQZY95ujPm8MeaSMeb7Bjz+1caYTxpj2saYb+l77L3GmBei/97bdf/jxphno33+C2OM2Y/XIiIiInKYHFiQZ4zxgZ8G/izwEPAeY8xDfZt9EfhLwK/2PXcG+EfAW4G3AP/IGHMievhngCeBi9F/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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fa67339e550>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Set the default figure size\n",
    "plt.rcParams['figure.figsize'] = [10.0, 6.0]\n",
    "\n",
    "# # Make scatter plot\n",
    "ax = returns.plot.scatter(x = 0, y = 483, grid = True, color = 'white', alpha = 0.5, linewidth = 0)\n",
    "    \n",
    "ax.set_facecolor('lightslategray')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TODO:\n",
    "\n",
    "In the code below, write a function `get_num_components(df, var_ret)` that takes a dataframe, `df`, and a value for the desired amount of variance you want to retain from the `df` dataframe,`var_ret`. In this case, the parameter `df` should be the `returns` dataframe obtained above. The parameter  `var_ret` must be anumber between 0 and 1. The function should return the number of principal components you need to retain that amount of variance. To do this, use Scikit-Learn's PCA() class and its `.explained_variance_ratio_`. The function should also print the total amount of variance retained. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total Variance Retained:  0.900236862496\n",
      "\n",
      "Number of Principal Components Needed:  179\n"
     ]
    }
   ],
   "source": [
    "# import resources\n",
    "from sklearn.decomposition import PCA\n",
    "\n",
    "\n",
    "def get_num_components(df, var_ret):\n",
    "    \n",
    "    if var_ret > 1 or var_ret < 0:\n",
    "        print('Error')\n",
    "        return 0\n",
    "    \n",
    "    if var_ret == 1:\n",
    "        return df.shape[1]\n",
    "        \n",
    "    pca = PCA(n_components = df.shape[1])\n",
    "\n",
    "    pca.fit(df)\n",
    "    \n",
    "    needed_components = 0\n",
    "    \n",
    "    var_sum = 0\n",
    "    \n",
    "    for i in range(0, df.shape[1]):\n",
    "\n",
    "        if var_sum >= var_ret:\n",
    "            print('Total Variance Retained: ', pca.explained_variance_ratio_[0:needed_components].sum())\n",
    "            return needed_components\n",
    "        else:\n",
    "            needed_components += 1            \n",
    "            var_sum += pca.explained_variance_ratio_[i]\n",
    "            \n",
    "num_components = get_num_components(returns, 0.9)\n",
    "\n",
    "print('\\nNumber of Principal Components Needed: ', num_components)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# TODO:\n",
    "\n",
    "In the previous section you calculated the number of principal compenents needed to retain a given amount of variance. As you might notice you can greatly reduce the dimensions of the data even if you retain a high level of variance (`var_ret` > 0.9). In the code below, use the number of components needed calculated in the last section, `num_components` to calculate by the percentage of dimensionality reduction. For example, if the original data was 100-dimensional, and the amount of components needed to retian a certain amount of variance is 70, then we are able to reduce the data by 30%. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "We were able to reduce the dimenionality of the data by: 63.469387755102034 percent\n"
     ]
    }
   ],
   "source": [
    "# Calculate the percentage of dimensionality reduction\n",
    "red_per = ((returns.shape[1] - num_components) / returns.shape[1]) * 100\n",
    "\n",
    "print('We were able to reduce the dimenionality of the data by:', red_per, 'percent')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
